<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <style type="text/css">
    ul {
      padding: 0;
      margin: 0;
    }
    </style>
    <link type="image/x-icon" rel="icon" href="favicon.ico" />
    <link type="image/x-icon" rel="shortcut icon" href="favicon.ico" />
    <link type="text/css" rel="stylesheet" href="pipe.css" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>node v0.4 announcement</title>
  </head>
  <body>
    <h2>Second Stable Branch of Node released</h2>

    <p>
    <a
      href="https://github.com/ry/node/wiki/Migrating-from-v0.2-to-v0.3">Wiki
    page detailing API changes between v0.4 and v0.2</a>

    <p>
    Major changes since v0.2:

    <ul>
      <li> Major overhaul of TLS/SSL system. Previously the binding to
      OpenSSL was heavily interwoven into the socket code. This binding was
      reworked to present each connection as a pair of "streams" instead: a
      duplex encrypted stream and a duplex cleartext stream. The encrypted
      stream is piped to a raw TCP socket using the general purpose
      <code>Stream.prototype.pipe()</code> method. Functionality was
      enhanced and API simplified.

      <li>Simpler HTTP client API with connection pools.

      <li> Cheaper <code>Buffer</code> allocation. Node uses
      <code>Buffer</code> objects in many places - it was noticed that they
      were relatively slow to allocate and difficult to garbage collect. The
      implementation changed to use pure javascript objects instead of
      an <code>ObjectWrap</code> which improved performance.

      <li> With a good amount of experience now, some modifications to the
      module loading system were made to better support package managers.
      In particular, npm was forced to resort to deep symlinks and "shim"
      modules to work around missing features in <code>require()</code>. The main
      changes are:
      <ol>
        <li><code>require()</code> calls realpath. That is,
        it resolves symbolic links. This allows symlinked modules to make
        relative requires.

        <li><code>require()</code> now has a primitive understanding of
        <code>package.json</code>. It looks for the <code>main</code>
        script. This allows <code>require()</code> to work on package
        directories directly.

        <li>A specially named directory, <code>node_modules/</code>, is
        searched in the current directory for any modules. This will
        hopefully encourage programmers to bundle modules rather than
        rely on a global namespace.
      </ol>
      Read more about these features in <a
        href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/doc/api/modules.markdown">the
        module documentation</a>.

      <li> A half-complete but good start a native windows build with MinGW
      is underway by Bert Builder. Build instructions can be found <a
        href="https://github.com/ry/node/wiki/Building-node.js-on-mingw">on
        the wiki</a>.

      <li> Node upgraded to the latest version of V8, <code>v3.1.2</code>.
      This includes much work including V8's new compilation infrastructure
      and a GDB plugin on Linux.
      Read <a
        href="https://github.com/ry/node/blob/583f2e599962f2664dbaafa0ae98a8d6c1242441/deps/v8/ChangeLog">the
        full V8 ChangeLog</a>.

      <li>A new built-in client for V8's debugger was added to Node. It is
      still very primitive but usable for simple task. There is a <a
        href="http://vimeo.com/19465332">small introduction video</a> and
      some <a
        href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/doc/api/debugger.markdown">documentation</a>.

      <li>An <code>os</code> module was added by Brian White which exposes
      a lot of basic but useful system information: <code>os.cpus(),
        os.freemem(), os.totalmem(), os.loadavg()</code>

      <li> And, of course, many of bug fixes. See the
      <a
        href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/ChangeLog">full
        changelog</a>.

    </ul>

  </body>
</html>
